/**
 * 获取数据
 */
var request = require('request');
var cheerio = require('cheerio');
// var iconv = require('iconv-lite');//转码
var async = require('async');
var db = require('../model/mysql');
//读取源文件
var R = function (url, cb) {
    request({url: url,gzip:true}, function (err, response, body) {
        if (!err && response.statusCode == 200) {
            // var result = iconv.decode(body,'win1252');
            cb(null,body);
        }else{
            cb(err);
        }
    });
};
//获取分类数据
exports.category=function(url,callback) {
    async.waterfall([
        function (cb) {
            var categorys = [];
            R(url, function (err, result) {
                var $ = cheerio.load(result);
                $('.nav a').each(function () {
                    $me = $(this);
                    var category = {};
                    if (/^[\/].*[\/]$/.test($me.attr('href'))) {
                        category.link = $me.attr('href');
                        category.name = $me.text();
                        categorys.push(category);
                    }
                });
                cb(null, categorys);
            });
        },
        function (data, cb) {
            var categorys = [];
            async.each(data, function (item, cbb) {
                R(url + item.link, function (err2, result2) {
                    var $2 = cheerio.load(result2);
                    // console.log($2('.page a').eq(5).attr('href'));
                    var str = $2('.page a').eq(5).attr('href');
                    item.maxPage = parseInt(str.replace(/\/\?p=/, ''));
                    categorys.push(item);
                    cbb();
                });
            },function(){
                cb(null, categorys);
            });
        }
    ], function (err, result) {
        callback(err, result);
    })
};
//获取文章数据
/*
* @param categorys 分类数据
* @param url 网站url
* @param return articles 文章数据
 */
exports.article=function(url,callback){
    async.auto({
        cate: function (cb){
            //从数据库获取分类数据 数据量太大的话先试着一个一个分类执行
            // var sql = 'select * from category;';//获取全部分类的
            var sql = 'select * from category where id=6;';//获取单个分类的
            db.query(sql,function(err,data){
                cb(err,data);
            })
        },
        link:['cate',function(results,cbx){
            //获取分类的所有链接
            var links=[];
            async.each(results.cate,function(item,cb2){
                //获取每个分类的所有链接
                async.waterfall([
                    function(cb){//获取页数数组
                        var pages=[];
                        for(var i=1;i<=item.maxPage;i++){
                            pages.push(i);
                        }
                        cb(null,pages);
                    },
                    function(data,cb){//获取每页链接
                        async.each(data,function(item2,cb3){
                            var u=url+item.link+'?p='+item2;
                            R(u,function(rerr,rresult){
                                var $ = cheerio.load(rresult);
                                $('.categorylist a').each(function(){
                                    $me = $(this);
                                    // var tt=/^[\/]\w*[\/]\d*[\/]$/.test($me.attr('href'));
                                    if(/^[\/]\w*[\/]\d*[\/]$/.test($me.attr('href'))){
                                        var link={};
                                        link.link=$me.attr('href');
                                        link.cid=item.id;
                                        links.push(link);
                                    }
                                });
                                cb3();
                            })
                        },function(){
                            cb();
                        })
                    }
                ],function(){
                    cb2();
                });
            },function(){
                cbx(null,links);
            })
        }],
        articles:['cate','link',function(results,cb){
            var articles=[];
            async.each(results.link,function(item,cbb){
                //读取每个链接，获取文章详情
                var article={};
                R(url+item.link,function(rerr,rresult){
                    var $=cheerio.load(rresult);
                    article.title=$('#article .title h1').text();
                    article.cat_id=item.cid;
                    var info=$('#article .info').text();
                    var _info=info.match(/(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2})\s{1,}作者:(\S*)\s/);
                    article.post_time=_info[1];
                    article.author=_info[2];
                    //获取文章内容
                    var content='';
                    var l=$('#article .content p').length;
                    $('#article .content p').each(function(){
                        if($(this).index()!=l){
                            content +='<p>'+$(this).text()+'</p>';
                        }
                    });
                    article.content=content.replace(/( 文章阅读网：www.sanwen.net )/,'');
                    articles.push(article);
                    cbb();
                // console.log(articles);
                })
            },function(){
                cb(null,articles);
            });
        }]
    },function(err,results){
        callback(err,results.articles);
        // console.log(results);
    })
};